package com.ruoyi.system.service.aggregation;

import java.util.List;
import com.ruoyi.system.domain.aggregation.UserMerchantBinding;

/**
 * 用户商家绑定记录Service接口
 * 
 * @author ruoyi
 * @date 2025-01-10
 */
public interface IUserMerchantBindingService 
{
    /**
     * 查询用户商家绑定记录
     * 
     * @param id 用户商家绑定记录主键
     * @return 用户商家绑定记录
     */
    public UserMerchantBinding selectUserMerchantBindingById(Long id);

    /**
     * 查询用户商家绑定记录列表
     * 
     * @param userMerchantBinding 用户商家绑定记录
     * @return 用户商家绑定记录集合
     */
    public List<UserMerchantBinding> selectUserMerchantBindingList(UserMerchantBinding userMerchantBinding);

    /**
     * 查询用户当前绑定的商家
     * 
     * @param userId 用户ID
     * @return 用户商家绑定记录
     */
    public UserMerchantBinding selectUserCurrentBinding(Long userId);

    /**
     * 查询商家绑定的用户数量
     * 
     * @param merchantId 商家ID
     * @return 绑定用户数量
     */
    public int countMerchantBindings(Long merchantId);

    /**
     * 新增用户商家绑定记录
     * 
     * @param userMerchantBinding 用户商家绑定记录
     * @return 结果
     */
    public int insertUserMerchantBinding(UserMerchantBinding userMerchantBinding);

    /**
     * 修改用户商家绑定记录
     * 
     * @param userMerchantBinding 用户商家绑定记录
     * @return 结果
     */
    public int updateUserMerchantBinding(UserMerchantBinding userMerchantBinding);

    /**
     * 批量删除用户商家绑定记录
     * 
     * @param ids 需要删除的用户商家绑定记录主键集合
     * @return 结果
     */
    public int deleteUserMerchantBindingByIds(Long[] ids);

    /**
     * 删除用户商家绑定记录信息
     * 
     * @param id 用户商家绑定记录主键
     * @return 结果
     */
    public int deleteUserMerchantBindingById(Long id);

    /**
     * 解绑用户商家关系
     * 
     * @param userMerchantBinding 解绑信息
     * @return 结果
     */
    public int unbindUserMerchant(UserMerchantBinding userMerchantBinding);

    /**
     * 用户首次消费时绑定商家
     * 
     * @param userId 用户ID
     * @param merchantId 商家ID
     * @param merchantName 商家名称
     * @param orderId 订单ID
     * @param orderAmount 订单金额
     * @return 结果
     */
    public int bindUserToMerchant(Long userId, Long merchantId, String merchantName, Long orderId, java.math.BigDecimal orderAmount);

    /**
     * 检查用户是否已绑定商家
     * 
     * @param userId 用户ID
     * @return 是否已绑定
     */
    public boolean isUserBoundToMerchant(Long userId);

    /**
     * 获取用户绑定的商家信息
     * 
     * @param userId 用户ID
     * @return 商家信息
     */
    public UserMerchantBinding getUserBoundMerchant(Long userId);

    /**
     * 检查商家是否达到绑定用户上限
     * 
     * @param merchantId 商家ID
     * @return 是否达到上限
     */
    public boolean isMerchantBindingLimitReached(Long merchantId);
}
